import axios from 'axios'
import store from '../store'
import { ElMessage } from 'element-plus'
import { getToken } from '../utils/auth'

// 创建一个 create 实例
const server = axios.create({
  timeout: 20000000 // 超时时间
})

server.interceptors.request.use(config => {
  if (store.getters.token) {
    // 让每个请求携带token-- ['X-Token']为自定义key 请根据实际情况自行修改
    config.headers.token = getToken()
  }
  return config
}, error => {
  Promise.reject(error)
})

server.interceptors.response.use(
  /**
   * 下面的注释为通过在response里，自定义code来标示请求状态
   * 当code返回如下情况则说明权限有问题，登出并返回到登录页
   * 如想通过xmlhttprequest来状态码标识 逻辑可写在下面error中
   * 以下代码均为样例，请结合自生需求加以修改，若不需要，则可删除
  */
  response => {
    // 处理网络错误
    if (response.status !== 200 && response.status !== 302) {
      ElMessage({ message: `请求状态异常:status= ${response.status}`, type: 'error', duration: 3000 })
    }
    const res = response.data
    res.status = res.code || 1
    // 处理业务错误
    if (res.status !== 1) {
      ElMessage({ message: `${res.desc}`, type: 'error', duration: 3000 })
      // 登录过期 跳转到登录页面
      if (res.status === 110) {
        window.location.href = '/login'
      }

      return Promise.reject(res.desc)
    } else {
      return res.data
    }
  },
  error => {
    ElMessage({ message: error.message, type: 'error', duration: 3000 })
    return Promise.reject(error)
  })

export default server
